﻿Imports SuporteRepository
Imports SuporteModel

Public Class ChamadoService

    Private chamadodb As IChamado = New ProvChamadoDAO(ConnectionFactory.GetConnection())
    Private lojadb As ILoja = New ProvLojaDAO(ConnectionFactory.GetConnection())
    Private sistemadb As ISistema = New ProvSistemaDAO(ConnectionFactory.GetConnection())
    Private usuariodb As IUsuario = New ProvUsuarioDAO(ConnectionFactory.GetConnection())
    Private clientedb As ICliente = New ProvClienteDAO(ConnectionFactory.GetConnection())


    Public Function CadastrarChamado(ByVal parChamado As Chamado) As Boolean
        Return chamadodb.CadastrarChamado(parChamado)
    End Function

    Public Function ListarChamado(ByVal parDataInicio As DateTime, ByVal parDataFim As DateTime) As List(Of Chamado)
        Return chamadodb.ListarChamado(parDataInicio, parDataFim)
    End Function

    Public Function FecharChamado(ByVal parIdChamado As Integer) As Boolean
        Return chamadodb.FecharChamado(parIdChamado)
    End Function

    Public Function CadastrarComentario(ByVal parUsuario As Usuario, ByVal parIdChamado As Integer, ByVal parComentario As String) As Boolean
        Return chamadodb.CadastrarComentario(parUsuario, parIdChamado, parComentario)
    End Function

    Public Function ListarComentarioPorChamado(ByVal parIdChamado) As List(Of Comentario)
        Return chamadodb.ListarComentarioPorChamado(parIdChamado)
    End Function

    Public Function ExcluirComentario(ByVal parIdComentario As Integer) As Boolean
        Return chamadodb.ExcluirComentario(parIdComentario)
    End Function

    Public Function UltimoChamado() As Chamado
        Return chamadodb.UltimoChamado()
    End Function

    'Paginação
    'parPagAtual Codigo do primeiro chamado da lista exibida
    Public Function ListarChamado(ByVal parPagAtual As Integer, ByVal parQtdeChamados As Integer, ByVal parDataInicio As DateTime, ByVal parDataFim As DateTime, ByVal parStatus As Integer, ByVal parTipo As Integer) As List(Of Chamado)
        Dim listaChamados As New List(Of Chamado) '= chamadodb.listarChamado(parPagAtual, parQtdeChamados, parDataInicio, parDataFim, parStatus, parTipo)
        Return Nothing
    End Function

    <Obsolete("Existem metodos que realizam a consulta com todos os parametros")>
    Public Function ListarChamado(ByVal parPagAtual As Integer, ByVal parQtdeChamados As Integer, ByVal parStatus As Integer, ByVal parTipo As Integer) As List(Of Chamado)
        Dim listaChamados As List(Of Chamado) = chamadodb.ListarChamado(parPagAtual, parQtdeChamados, parStatus, parTipo)
        Return listaChamados
    End Function

    Public Function TotalChamados() As Integer
        Return chamadodb.TotalChamados()
    End Function

    Public Function BuscarChamado(ByVal parIdChamados As Integer) As Chamado
        Return chamadodb.BuscarChamadoPorId(parIdChamados)
    End Function

    'TODO Paginação com todos os parametros
    'Traz a proxima lista de chamados
    Public Function NextListaChamados(ByVal parPagAtual As Integer, ByVal parQuantidadeItens As Integer, ByVal parListaClientes As List(Of Cliente), ByVal parListaLojas As List(Of Loja), ByVal parListaSistemas As List(Of Sistema), ByVal parListaTecnicos As List(Of Tecnico), ByVal parListaTelas As List(Of Tela), ByVal parIdCodigo As Integer, ByVal parStatus As Integer, ByVal parTipo As Integer, ByVal parDataInicio As DateTime, ByVal parDataFim As DateTime) As List(Of Chamado)
        Dim listaChamados As New List(Of Chamado)
        listaChamados = chamadodb.NextListaChamados(parPagAtual, parQuantidadeItens, parListaClientes, parListaLojas, parListaSistemas, parListaTecnicos, parListaTelas, parIdCodigo, parStatus, parTipo, parDataInicio, parDataFim)
        Return listaChamados
    End Function

    'Traz a lista Anterior de chamados
    Public Function PreviousListaChamados(ByVal parPagAtual As Integer, ByVal parQuantidadeItens As Integer, ByVal parListaClientes As List(Of Cliente), ByVal parListaLojas As List(Of Loja), ByVal parListaSistemas As List(Of Sistema), ByVal parListaTecnicos As List(Of Tecnico), ByVal parListaTelas As List(Of Tela), ByVal parIdCodigo As Integer, ByVal parStatus As Integer, ByVal parTipo As Integer, ByVal parDataInicio As DateTime, ByVal parDataFim As DateTime) As List(Of Chamado)
        Dim listaChamados As New List(Of Chamado)
        listaChamados = chamadodb.PreviousListaChamados(parPagAtual, parQuantidadeItens, parListaClientes, parListaLojas, parListaSistemas, parListaTecnicos, parListaTelas, parIdCodigo, parStatus, parTipo, parDataInicio, parDataFim)
        Return listaChamados
    End Function

    Public Function ListarChamado(ByVal parListaClientes As List(Of Cliente), ByVal parListaLojas As List(Of Loja), ByVal parListaSistemas As List(Of Sistema), ByVal parListaTecnicos As List(Of Tecnico), ByVal parListaTelas As List(Of Tela), ByVal parIdCodigo As Integer, ByVal parStatus As Integer, ByVal parTipo As Integer, ByVal parDataInicio As DateTime, ByVal parDataFim As DateTime) As List(Of Chamado)
        Return chamadodb.listarChamado(parListaClientes, parListaLojas, parListaSistemas, parListaTecnicos, parListaTelas, parIdCodigo, parStatus, parTipo, parDataInicio, parDataFim)
    End Function

    Public Function CarregarDadosChamados(parListaChamados As List(Of Chamado)) As List(Of Chamado)
        For index = 0 To parListaChamados.Count - 1

            parListaChamados(index).Loja = lojadb.BuscarLoja(parListaChamados(index).Loja.Codigo)
            parListaChamados(index).Sistema = sistemadb.BuscarSistema(parListaChamados(index).Sistema.IdSistema)
            parListaChamados(index).Usuario = usuariodb.BuscaUsuario(parListaChamados(index).Usuario.Codigo)
            parListaChamados(index).Cliente = clientedb.BuscarCliente(parListaChamados(index).Cliente.Codigo)
        Next
        Return parListaChamados
    End Function


End Class
